﻿using System;

namespace UnsafeCodeApplication
{
    class Program
    {
        static unsafe void Main(string[] args)
        {
            int[] array = { 0, 1, 2, 3, 4 };
            fixed (int* ptr = array) // 使用fixed关键字来固定变量位置不移动
            {

            }

            int* ptr2 = stackalloc int[1]; //stackalloc 在unsafe不安全环境中，我们可以通过stackalloc在堆栈上分配内存，因为在堆栈上分配的内存不受内存管理器管理，因此其相应的指针不需要固定。
        }
    }
}
/*
 fixed关键字

由于C#中声明的变量在内存中的存储受垃圾回收器管理；因此一个变量（例如一个大数组）有可能在运行过程中被移动到内存中的其他位置。如果一个变量的内存地址会变化，那么指针也就没有意义了。

解决方法就是使用fixed关键字来固定变量位置不移动。
 
 */